package com.xinke.module.system.service.oauth2;

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import com.xinke.module.system.model.vo.oauth2.*;
import com.xinke.module.system.model.entity.oauth2.OAuth2CodeDO;
import com.xinke.component.common.pojo.PageResult;
import com.xinke.component.common.util.object.BeanUtils;

import com.xinke.module.system.mapper.oauth2.OAuth2CodeMapper;

import static com.xinke.component.common.exception.util.ServiceExceptionUtil.exception;

/**
 * OAuth2 授权码 Service 实现类
 *
 * @author yzx
 */
@Service
@Validated
public class OAuth2CodeServiceImpl implements OAuth2CodeService {

    @Resource
    private OAuth2CodeMapper oAuth2CodeMapper;

    @Override
    public Long createOAuth2Code(OAuth2CodeSaveReqVO createReqVO) {
        // 插入
        OAuth2CodeDO oAuth2Code = BeanUtils.toBean(createReqVO, OAuth2CodeDO.class);
        oAuth2CodeMapper.insert(oAuth2Code);
        // 返回
        return oAuth2Code.getCodeId();
    }

    @Override
    public void updateOAuth2Code(OAuth2CodeSaveReqVO updateReqVO) {
        // 校验存在
        validateOAuth2CodeExists(updateReqVO.getCodeId());
        // 更新
        OAuth2CodeDO updateObj = BeanUtils.toBean(updateReqVO, OAuth2CodeDO.class);
        oAuth2CodeMapper.updateById(updateObj);
    }

    @Override
    public void deleteOAuth2Code(Long codeId) {
        // 校验存在
        validateOAuth2CodeExists(codeId);
        // 删除
        oAuth2CodeMapper.deleteById(codeId);
    }

    private void validateOAuth2CodeExists(Long codeId) {
        if (oAuth2CodeMapper.selectById(codeId) == null) {
            throw exception(null);
        }
    }

    @Override
    public OAuth2CodeDO getOAuth2Code(Long codeId) {
        return oAuth2CodeMapper.selectById(codeId);
    }

    @Override
    public PageResult<OAuth2CodeDO> getOAuth2CodePage(OAuth2CodePageReqVO pageReqVO) {
        return oAuth2CodeMapper.selectPage(pageReqVO);
    }

}